In the hardware design industry, having a design error can be disastrous. In the Intel Pentium P5 chip, a floating-point division bug caused Intel to lose up to $475 million in 1995. More recently in 2007, AMD encountered a virtualization bug in its Phenom line of CPUs requiring them to revise the silicon, a costly procedure. Unlike software bugs, hardware bugs cannot always be fixed with a simple patch. These bugs cost hardware manufacturers millions of dollars and precious time in a quickly moving industry.
Assertions or invariants provide a mechanism to express desirable properties that should be true in the system. Assertions are used for validating hardware designs at different stages through their life cycles, such as pre-silicon formal verification, dynamic validation, runtime monitoring and emulation. Assertions are also synthesized into hardware for post-silicon debug and validation and in-field diagnosis.
Among all the solutions for ensuring robustness of hardware systems, assertion based verification has emerged as the most popular candidate solution for “pre-silicon” design functionality checking. Assertions are used for static (formal) verification as well as dynamic verification of the register transfer level (RTL) design in the pre-silicon phase. Because not all assertions are as helpful when compared to others, a ranking of assertions may help to decide which assertions are more important and should be employed over others.